package com.prj.ufdm.auth.controller;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.prj.ufdm.auth.bpo._impl.SysRoleBPOImpl;
import com.prj.ufdm.auth.enums.AuthRetCodeEnum;
import com.prj.ufdm.auth.model.SysRole;
import com.prj.ufdm.core.dto.RetData;
import com.prj.ufdm.core.exception.BaseException;
import com.prj.ufdm.core.util.UfdmStringUtil;
import com.prj.ufdm.core.util.UfdmUUIDUtil;

/**
 * 系统角色控制类
 * @author 胡义振  
 * @date 2018年3月26日
 */
@RequestMapping(value = "/api/auth/sysrole")
@Controller
public class SysRoleController {
	
	@Autowired
	SysRoleBPOImpl sysRoleBPO;
	
	/**
	 * 查询所有系统角色
	 * @param roleType 角色类型 （为空 查询所有）
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	@RequestMapping(value = "/doGetList")
	@ResponseBody
	public RetData<List<SysRole>> doGetList(String roleType) throws Exception {
		RetData<List<SysRole>> retData = new RetData<List<SysRole>>();
		if(roleType==null || roleType.equals("")) {
		    retData.setRetBody(sysRoleBPO.doGetList(null));
		}
		else {
			SysRole sysRole = new SysRole();
			sysRole.setRoleType(roleType);
			retData.setRetBody(sysRoleBPO.doGetList(sysRole));
		}
		return retData;
	}
	
	
	/**
	 * 查询用户角色
	 * @param userId 用户ID
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	@RequestMapping(value = "/doGetListByUserId")
	@ResponseBody
	public RetData<List<SysRole>> doGetListByUserId(String userId) throws Exception {
		RetData<List<SysRole>> retData = new RetData<List<SysRole>>();
		// 用户ID不能为空
		if("".equals(UfdmStringUtil.replaceAllBlank(userId))) {
			throw new BaseException(AuthRetCodeEnum.RET_CODE_0102004.getCode(),AuthRetCodeEnum.RET_CODE_0102004.getMessage());
		}
		retData.setRetBody(sysRoleBPO.doGetSysRoleListByUserId(userId));
		return retData;
	}
	
	/**
	 * 保存系统角色
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	@RequestMapping(value = "/doSaveRole")
	@ResponseBody
	public RetData<String> doSaveRole(SysRole sysRole) throws Exception {
		RetData<String> retData = new RetData<String>();
		sysRole.setId(UfdmUUIDUtil.getUUID());
		sysRoleBPO.doSave(sysRole);
		return retData;
	}
	
	/**
	 * 修改系统角色
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	@RequestMapping(value = "/doModRole")
	@ResponseBody
	public RetData<String> doModRole(SysRole sysRole) throws Exception {
		RetData<String> retData = new RetData<String>();
		sysRoleBPO.doModById(sysRole);
		return retData;
	}
	
	/**
	 * 删除系统角色
	 * @param id 要删除的角色ID（多个ID，逗号分隔）
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	@RequestMapping(value = "/doDelRole")
	@ResponseBody
	public RetData<String> doDelRole(String id) throws Exception {
		RetData<String> retData = new RetData<String>();
		sysRoleBPO.doRmSysRoleById(id);
		return retData;
	}
	
	
	/**
	 * 添加角色的功能
	 * @param 
	 *      roleId      角色ID
	 *      functionId  功能ID（多个用","号分隔）
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	@RequestMapping(value = "/doAddRoleFunction")
	@ResponseBody
	public RetData<String> doAddRoleFunction(String roleId,String functionIds) throws Exception {
		RetData<String> retData = new RetData<String>();
		// 角色ID不能为空
		if("".equals(UfdmStringUtil.replaceAllBlank(roleId))) {
			throw new BaseException(AuthRetCodeEnum.RET_CODE_0103001.getCode(),AuthRetCodeEnum.RET_CODE_0103001.getMessage());
		}
		// 功能ID不能为空
		if("".equals(UfdmStringUtil.replaceAllBlank(functionIds))) {
			throw new BaseException(AuthRetCodeEnum.RET_CODE_0103002.getCode(),AuthRetCodeEnum.RET_CODE_0103002.getMessage());
		}
		sysRoleBPO.doAddRoleFunction(roleId,functionIds);
		return retData;
	}
	
	/**
	 * 添加角色的用户
	 * @param 
	 *      roleId      角色ID
	 *      userIds     用户ID（多个用","号分隔）
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	@RequestMapping(value = "/doAddRoleUser")
	@ResponseBody
	public RetData<String> doAddRoleUser(String roleId,String userIds) throws Exception {
		RetData<String> retData = new RetData<String>();
		// 角色ID不能为空
		if("".equals(UfdmStringUtil.replaceAllBlank(roleId))) {
			throw new BaseException(AuthRetCodeEnum.RET_CODE_0103001.getCode(),AuthRetCodeEnum.RET_CODE_0103001.getMessage());
		}
		// 用户ID不能为空
		if("".equals(UfdmStringUtil.replaceAllBlank(userIds))) {
			throw new BaseException(AuthRetCodeEnum.RET_CODE_0102004.getCode(),AuthRetCodeEnum.RET_CODE_0102004.getMessage());
		}
		sysRoleBPO.doAddRoleSysUser(roleId,userIds);
		return retData;
	}
	
	/**
	 * 删除角色中的用户
	 * @param 
	 *      roleId      角色ID
	 *      userIds     用户ID（多个用","号分隔）
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	@RequestMapping(value = "/doDelRoleUser")
	@ResponseBody
	public RetData<String> doDelRoleUser(String roleId,String userIds) throws Exception {
		RetData<String> retData = new RetData<String>();
		// 角色ID不能为空
		if("".equals(UfdmStringUtil.replaceAllBlank(roleId))) {
			throw new BaseException(AuthRetCodeEnum.RET_CODE_0103001.getCode(),AuthRetCodeEnum.RET_CODE_0103001.getMessage());
		}
		// 用户ID不能为空
		if("".equals(UfdmStringUtil.replaceAllBlank(userIds))) {
			throw new BaseException(AuthRetCodeEnum.RET_CODE_0102004.getCode(),AuthRetCodeEnum.RET_CODE_0102004.getMessage());
		}
		sysRoleBPO.doRmRoleUser(roleId,userIds);
		return retData;
	}
	
}
